package br.com.caim.email.remocao.impl;

import java.util.Properties;

import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Flags.Flag;

import br.com.caim.bo.entidade.Conta;
import br.com.caim.email.excecoes.sistema.ContaEmailIndisponivelException;
import br.com.caim.email.remocao.IRemocaoMensagem;

public class RemocaoMensagem implements IRemocaoMensagem {

	public void apagarMensagem(int msgNumber, Conta conta) throws ContaEmailIndisponivelException {
		Properties props = new Properties();
		Message msgs[] = null;
		
		props.put("mail.store.protocol", "pop3");
		
		// TODO adicionar Authenticator a instancia de session
		Session session = Session.getInstance(props);
		
		try {
			Store store = session.getStore("pop3s");
			
			// TODO autenticar pelo Authenticator do session
			store.connect(conta.getProvedor().getHostImap(), conta.getEnderecoEmail(), conta.getSenha());
			
			// TODO verificar se existem outras pastas
			Folder folder = store.getFolder("INBOX");
			
			// TODO verificar utilizacao de Folder somente leitura ou com escrita tambem
			folder.open(Folder.READ_WRITE);
	
			Message mensagem = folder.getMessage(msgNumber);
			
			mensagem.setFlag(Flag.DELETED, true);
			
			folder.close(true);
		} catch (NoSuchProviderException e) {
			// TODO tratamento de excecao adequado
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
	        throw new ContaEmailIndisponivelException("Não foi possível se conectar à seguinte Conta de Email: " + conta.getEnderecoEmail());
		}
	}
	
//	public void apagarMensagem(int msgNumber, Conta conta) throws ContaEmailIndisponivelException {
//		Properties props = new Properties();
//		Message msgs[] = null;
//		
//		// TODO adicionar Authenticator a instancia de session
//		Session session = Session.getInstance(props, null);
//		
//		try {
//			Store store = session.getStore("pop3");
//			
//			// TODO autenticar pelo Authenticator do session
//			store.connect(conta.getProvedor().getHostImap(), getNomeContaPeloEmail(conta.getEnderecoEmail()), conta.getSenha());
//			
//			// TODO verificar se existem outras pastas
//			Folder folder = store.getFolder("INBOX");
//			
//			// TODO verificar utilizacao de Folder somente leitura ou com escrita tambem
//			folder.open(Folder.READ_WRITE);
//			
//			Message mensagem = folder.getMessage(msgNumber);
//			
//			mensagem.setFlag(Flag.DELETED, true);
//			
//			folder.close(true);
//		} catch (NoSuchProviderException e) {
//			// TODO tratamento de excecao adequado
//			e.printStackTrace();
//		} catch (MessagingException e) {
//			e.printStackTrace();
//			throw new ContaEmailIndisponivelException("Não foi possível se conectar à seguinte Conta de Email: " + conta.getEnderecoEmail());
//		}
//	}
//	
//	// Recupera o nome da conta a partir do endereco do email
//	private String getNomeContaPeloEmail(String email) {
//		int index = email.indexOf("@");
//		
//		return email.substring(0, index);
//	}

}
